package com.qire.manhua.activity.helper;

import com.qire.antsrouter.AntsRouter;
import com.qire.antsrouter.lifecycleHandler.ActivityManageHandler;
import com.qire.common.constant.Navigation;
import com.qire.common.model.entity.UserEntity;
import com.qire.manhua.dal.service.QuickLoginService;
import com.qire.other.thirdPlatform.AliQuickLoginPlatform;
import com.qire.other.thirdPlatform.AliQuickLoginPlatform.TokenResultData;

/**
 * 由于部分登录发生在按钮点击时，并非跳转页面时，所以不会有路由拦截的逻辑，那么这里就把登陆线路选择抽取出来做成一个独立路由器。
 * 这样可以保证所有地方需要登录都可以走统一线路，来完成登录页面的选择，而路由拦截器则只作为一个统一拦截点来使用了。
 */
public final class LoginRouter {

    public static final LoginRouter ROUTER = new LoginRouter();

    private LoginRouter() {
        AliQuickLoginPlatform.QUICK
                .addHandleCallback(AliQuickLoginPlatform.终端环境检查成功, this::launchAuthorize)
                .addHandleCallback(AliQuickLoginPlatform.获取token成功, this::aliQuickMobileLogin)
                .addHandleCallback(AliQuickLoginPlatform.跳转登录引导页, this::gotoLoginGuidePage)
                .addHandleCallback("WeChat", this::weChatLogin)
                .addHandleCallback("QQ", this::qqLogin);
    }

    /**
     * 检查登录是否需要拦截，如果需要登录则拦截并自动选择登录线路打开，如果不需要登录则直接返回
     * @return true 为需要登录，拦截，false 不需要登录，放行。
     */
    public boolean checkLoginRouteIfNeed() {
        if(UserEntity.self.isLogin()) {
            return false;
        } else {
            AliQuickLoginPlatform.QUICK.checkAvailable();
            return true;
        }
    }

    /** 唤起一键登录授权页 */
    private void launchAuthorize(TokenResultData resultData) {
        AliQuickLoginPlatform.QUICK.authorize(ActivityManageHandler.HANDLER.currentActivity(), 3000);
    }

    /** 使用阿里手机一键登录 */
    private void aliQuickMobileLogin(TokenResultData resultData) {
        AliQuickLoginPlatform.QUICK.finishLoginAuthActivity();
        new QuickLoginService().aliQuickMobileLogin(resultData.token);
    }

    /** 使用微信一键登录 */
    private void weChatLogin(String data) {
        AliQuickLoginPlatform.QUICK.finishLoginAuthActivity();
        new QuickLoginService().weChatLogin("AliQuickLoginActivity");
    }

    /** 使用QQ一键登录 */
    private void qqLogin(String data) {
        AliQuickLoginPlatform.QUICK.finishLoginAuthActivity();
        new QuickLoginService().qqLogin("AliQuickLoginActivity");
    }

    /** 跳转去APP正常登录页 */
    private void gotoLoginGuidePage(Object data) {
        AntsRouter.ROUTER.buildCard(Navigation.Page.LoginGuidePage).navigation();
    }

}
